﻿namespace XYCAM.CadEngine.Command;

/*
 * 应该弄一个命令管理类,用生成器生成
 * 将所有项目中被标记特性的类都生成实例加入这个 管理类的集合中
 * 然后在其中一个CAD项目类中创建菜单的view 绑定这个集合
 */

/// <summary>
/// 命令生成对象父类,继承此类的将会生成器检查生成,并生成一个与放方法同名的 XyCommandDto 类型的属性
/// </summary>
/// <typeparam name="T">包含CAD命令的数据类型</typeparam>
public abstract class XyCommandObject<T> where T : XyCommandDto
{

    /// <summary>
    /// 当前实例中命令的分组名
    /// </summary>
    public string CommandGroup { get; set; } = "未命名组";

    /// <summary>
    /// 当覆盖重复触发,你可以写入你自己交互逻辑,返回true时会覆盖命令,否则跳过操作
    /// </summary>
    /// <returns>是否覆盖命令</returns>
    protected virtual bool OnCommandRepeat() => true;


    /// <summary>
    /// 为了不引用Json包,这个方法会使Json序列化时忽略Commands这个属性,用法:ShouldSerialize+属性名
    /// </summary>
    /// <returns>是否被序列化</returns>
    public bool ShouldSerializeCommands() => false;

}
